/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. * * This program and the accompanying materials are made available under * the terms of the Common Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/cpl-v10.html * * $Id: reportTask.java,v 1.1.1.1.2.1 2004/07/08 10:52:11 vlad_r Exp $ */ package com.vladium.emma.report; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Reference; import com.vladium.util.IProperties; import com.vladium.emma.ant.FileTask; import com.vladium.emma.ant.SuppressableTask; import com.vladium.emma.report.ReportCfg.Element_HTML; import com.vladium.emma.report.ReportCfg.Element_LCOV; import com.vladium.emma.report.ReportCfg.Element_TXT; import com.vladium.emma.report.ReportCfg.Element_XML; // ---------------------------------------------------------------------------- /** * @author Vlad Roubtsov, (C) 2003 */ public final class reportTask extends FileTask implements IReportProperties, IReportEnums { public reportTask (final SuppressableTask parent) { super (parent); } public void init () throws BuildException { super.init (); m_reportCfg = new ReportCfg (getProject (), this); } public void execute () throws BuildException { if (isEnabled ()) { final String [] reportTypes = m_reportCfg.getReportTypes (); if ((reportTypes == null) || (reportTypes.length == 0)) // no "txt" default for report processor throw (BuildException) newBuildException (getTaskName () + ": no report types specified: provide at least one of <txt>, <html>, <lcov>, <xml> nested elements", location).fillInStackTrace (); String [] files = getDataPath (true); if ((files == null) || (files.length == 0)) throw (BuildException) newBuildException (getTaskName () + ": no valid input data files have been specified", location).fillInStackTrace (); final Path srcpath = m_reportCfg.getSourcepath (); // combine report and all generic settings: final IProperties settings; { final IProperties taskSettings = getTaskSettings (); final IProperties reportSettings = m_reportCfg.getReportSettings (); // named report settings override generic named settings and file // settings have lower priority than any explicitly named overrides: settings = IProperties.Factory.combine (reportSettings, taskSettings); } final ReportProcessor processor = ReportProcessor.create (); processor.setDataPath (files); files = null; processor.setSourcePath (srcpath != null ? srcpath.list () : null); processor.setReportTypes (reportTypes); processor.setPropertyOverrides (settings); processor.run (); } } // sourcepath attribute/element: public void setSourcepath (final Path path) { m_reportCfg.setSourcepath (path); } public void setSourcepathRef (final Reference ref) { m_reportCfg.setSourcepathRef (ref); } public Path createSourcepath () { return m_reportCfg.createSourcepath (); } // generator elements: public Element_TXT createTxt () { return m_reportCfg.createTxt (); } public Element_LCOV createLcov () { return m_reportCfg.createLcov (); } public Element_HTML createHtml () { return m_reportCfg.createHtml (); } public Element_XML createXml () { return m_reportCfg.createXml (); } // report properties [defaults for all report types]: public void setUnits (final UnitsTypeAttribute units) { m_reportCfg.setUnits (units); } public void setDepth (final DepthAttribute depth) { m_reportCfg.setDepth (depth); } public void setColumns (final String columns) { m_reportCfg.setColumns (columns); } public void setSort (final String sort) { m_reportCfg.setSort (sort); } public void setMetrics (final String metrics) { m_reportCfg.setMetrics (metrics); } // not supported anymore: // public void setOutdir (final File dir) // { // m_reportCfg.setOutdir (dir); // } // // public void setDestdir (final File dir) // { // m_reportCfg.setDestdir (dir); // } // should not be set at the global level: // public void setOutfile (final String fileName) // { // m_reportCfg.setOutfile (fileName); // } public void setEncoding (final String encoding) { m_reportCfg.setEncoding (encoding); } // protected: ............................................................. // package: ............................................................... // private: ............................................................... private ReportCfg m_reportCfg; } // end of class // ----------------------------------------------------------------------------